﻿
Public Class Ventanilla
    Inherits System.Web.UI.Page
    Private persMedico As New Persona
    Private strCalFechaTurno As String
    Shared datosTurnos As New TurnosMedicos

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ImgeFondo As Image = Page.Master.FindControl("ImagFondoCabecera")


        Try
            If Not IsPostBack Then
                FG.culturaPaginas()

                'acomodo la imagen de fondo para que no escroleee 
                ImgeFondo.Height = 450

                CalendarFechaTurno.StartDate = DateTime.Today
                CalendarFechaTurno.EndDate = DateTime.Today.AddMonths(6)
            Else
                If Request.Form("__EVENTTARGET") = "FechaTurno" Then
                    strCalFechaTurno = Request.Form("__EVENTARGUMENT").ToString
                    txtFechaTurno.Text = strCalFechaTurno
                End If
            End If
        Catch ex As Exception
        End Try
    End Sub

    Protected Sub limpiarControles()

        txtFechaHora.Text = ""
        txtApellidoPaciente.Text = ""
        txtDNIpaciente.Text = ""
        txtNombrePaciente.Text = ""
        txtApellidoProfesional.Text = ""
        txtNombreProfesional.Text = ""
        txtEspecialidad.Text = ""
        txtFechaTurno.Text = ""
        btnTurno.Enabled = False

        FG.SacaCartelDeAViso(lblMensajeRegistro)
        FG.SacaCartelDeAViso(lblDiaProximo)
        pnlTurno.Visible = False
        pnlResultadoBusqueda.Visible = False
        pnlFechaTurno.Visible = False
        FG.LimpiarGridView(gvResultadoBusqueda)
        FG.LimpiarGridView(gvTurnosHorarios)
        FG.LimpiarGridView(gvTurnos)

    End Sub

    Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnBuscar.Click
        If txtDNI.Text = "" Or txtDNI.Text = "Búsqueda DNI" Then
            MuestraCartel("Para buscar ingrese DNI", lblMensajeRegistro)
            Exit Sub
        End If

        limpiarControles()
        BuscarDatos()
    End Sub

    Protected Sub BuscarDatos()
        Dim param(0) As ADODB.Parameter
        Dim Rs As ADODB.Recordset

        txtFechaHora.Text = Now.ToString

        param(0) = New ADODB.Parameter
        param(0).Name = "@DNI"
        param(0).Type = ADODB.DataTypeEnum.adVarChar
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(0).Value = txtDNI.Text
        param(0).Size = 10

        Rs = Datos.TraerTodos("traerDNI_NomyApPersona", param, "Ventanilla.aspx")

        If Rs.RecordCount > 0 Then
            txtDNIpaciente.Text = Rs.Fields(0).Value.ToString
            txtNombrePaciente.Text = Rs.Fields(1).Value.ToString
            txtApellidoPaciente.Text = Rs.Fields(2).Value.ToString
            btnTurno.Enabled = True
        Else
            limpiarControles()
        End If

        Rs = Datos.TraerTodos("traerTurnos_x_ventanilla", param, "Ventanilla.aspx")
        If Rs.RecordCount <> 0 Then
            SacaCartelDeAViso(lblMensajeRegistro)
            gvTurnos.DataSource = FG.cargaUnDataTable(Rs)
            gvTurnos.DataBind()
        Else
            FG.MuestraCartel("No hay turno para mostrar para el dia actual", lblMensajeRegistro)
            gvTurnos.DataSource = FG.cargaUnDataTable(Rs)
            gvTurnos.DataBind()
        End If
    End Sub

    Protected Sub btnTurno_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnTurno.Click
        FG.CargaCombo("traerHorario", cboDias)
        Me.pnlTurno.Visible = True

        'Si no tiene turnos el combo aparece (Sin turnos disponibles como leyenda)
    End Sub

    Private Sub gvTurnos_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvTurnos.RowDeleting
        Dim row As GridViewRow = gvTurnos.Rows(e.RowIndex)
        lblBorrar.Text = IIf(row.Cells(1).Text = "&nbsp;", 0, row.Cells(1).Text)
        lblFechaHoraBorrar.Text = IIf(row.Cells(2).Text = "&nbsp;", 0, row.Cells(2).Text)
        lblEspecialidadBorrar.Text = IIf(row.Cells(3).Text = "&nbsp;", 0, row.Cells(3).Text)
        lblNombreMedicoBorrar.Text = IIf(row.Cells(4).Text = "&nbsp;", 0, row.Cells(4).Text)

        MuestraCartelDeguardar("Desea eliminar el turno asignado el día: " + lblFechaHoraBorrar.Text + " con el profesional: " + _
                                lblNombreMedicoBorrar.Text + " OK / CANCELAR?", lblMensajeConfirmacion)

        popupConfirmacion.Show()

    End Sub

    Private Sub gvTurnos_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvTurnos.SelectedIndexChanged
        'alimenta la lista de espera. hacer update de estado=0
        'si se borra eliminar registro de la BD
        Dim row As GridViewRow = gvTurnos.SelectedRow
        Dim i As Integer = 1 'Numero de campos
        Dim param(i - 1) As ADODB.Parameter
        Dim Resultado As Boolean

        Var_Globales.Setea_dniPaciente(txtDNIpaciente.Text)
        Var_Globales.SeteaTipoVisita(TipoVisita.Consulta)
        Var_Globales.Setea_paginas("~/Ventanilla.aspx")

        'idTurno
        param(0) = New ADODB.Parameter
        param(0).Name = "@idTurno"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = IIf(row.Cells(1).Text = "&nbsp;", 0, row.Cells(1).Text)  ' <--el valor que le pasamos a la base
        param(0).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,

        Resultado = Datos.Modificar("ModificarTurno", param, "Ventanilla.aspx, gvTurnos_Recepcion")

        If Resultado = True Then
            MsgBox("A lista de espera", MsgBoxStyle.Information, "aviso")
            BuscarDatos()
        Else
            MsgBox("Fallo", MsgBoxStyle.Critical, "error")
        End If

    End Sub

    Protected Sub CmdBuscar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CmdBuscar.Click
        If txtApellidoProfesional.Text = "" And txtNombreProfesional.Text = "" And txtDNI.Text = "" Then
            FG.MuestraCartel("No se ha especificado ningun criterio de busqueda", lblMensaje)
            Exit Sub
        End If

        If txtDNI.Text <> "" Then
            If IsNumeric(txtDNI.Text) = False Then
                FG.MuestraCartel("El campo DNI solo puede tener caracteres numericos", lblMensaje)
                Exit Sub
            End If
        End If

        If BuscaSiHayNumerosEncadena(txtApellidoProfesional.Text) = True Then
            FG.MuestraCartel("No se permiten numeros en el apellido", lblMensaje)
            Exit Sub
        End If

        If BuscaSiHayNumerosEncadena(txtNombreProfesional.Text) = True Then
            FG.MuestraCartel("No se permiten numeros en el Nombre", lblMensaje)
            Exit Sub
        End If

        pnlResultadoBusqueda.Visible = True
        RealizarBusqueda()

    End Sub

    Private Sub RealizarBusqueda()
        Dim i As Integer = 3 'campos del param
        Dim Rs As ADODB.Recordset
        Dim Param(i - 1) As ADODB.Parameter

        Param(0) = New ADODB.Parameter
        Param(0).Name = "@apellido"
        Param(0).Type = ADODB.DataTypeEnum.adVarChar
        Param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        Param(0).Value = txtApellidoProfesional.Text
        Param(0).Size = 50

        Param(1) = New ADODB.Parameter
        Param(1).Name = "@nombre"
        Param(1).Type = ADODB.DataTypeEnum.adVarChar
        Param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
        Param(1).Value = txtNombreProfesional.Text
        Param(1).Size = 50

        Param(2) = New ADODB.Parameter
        Param(2).Name = "@especialidad"
        Param(2).Type = ADODB.DataTypeEnum.adVarChar
        Param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput
        Param(2).Value = txtEspecialidad.Text
        Param(2).Size = 50

        Rs = Datos.TraerTodos("BuscarEspecialidadxProfesional", Param, "Busca Especialidad por Profesional ")

        gvResultadoBusqueda.DataSource = FG.cargaUnDataTable(Rs)
        gvResultadoBusqueda.DataBind()

        'muestro el cartel de la Seleccione una persona 
        If Not Rs.RecordCount > 0 Then
            'muestro el mesaje de que no se encontraron resultados
            FG.MuestraCartel("No se encontraron resultados", lblMensaje)
            pnlResultadoBusqueda.Visible = False
        Else
            FG.SacaCartelDeAViso(lblMensaje)
        End If
    End Sub

    Private Sub gvResultadoBusqueda_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvResultadoBusqueda.RowCommand
        If e.CommandName = "Proximo Turno" Then
            MuestraCartel("Proximo turno: ", lblDiaProximo)
        End If
        If e.CommandName = "Ver Turno" Then
            MuestraCartel("Proximo turno: ", lblDiaProximo)
        End If

    End Sub

    Private Sub gvResultadoBusqueda_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvResultadoBusqueda.SelectedIndexChanged
        Dim Row As GridViewRow = gvResultadoBusqueda.SelectedRow
        Dim i As Integer = 2
        Dim param(i - 1) As ADODB.Parameter

        pnlFechaTurno.Visible = True
        persMedico.SetaDatosXDn(IIf(Row.Cells(4).Text = "&nbsp;", "", Row.Cells(4).Text))
        datosTurnos = New TurnosMedicos
        datosTurnos.dnimedico = persMedico.Dev_Dni
        datosTurnos.id_institucion = persMedico.Dev_ID_Institucion  'PersLOgueada.Dev_ID_Institucion
        datosTurnos.dniPersona = txtDNIpaciente.Text
        datosTurnos.Especialidad = IIf(Row.Cells(2).Text = "&nbsp;", "", Row.Cells(2).Text)

        param(0) = New ADODB.Parameter
        param(0).Name = "@dni_medico"
        param(0).Type = ADODB.DataTypeEnum.adVarChar
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(0).Value = datosTurnos.dnimedico
        param(0).Size = 255

        param(1) = New ADODB.Parameter
        param(1).Name = "@institucion"
        param(1).Type = ADODB.DataTypeEnum.adVarChar
        param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(1).Value = datosTurnos.id_institucion
        param(1).Size = 255

        FG.CargaComboxRS(Datos.TraerTodos("buscaDiasMedicoTrabajo", param, "funcion que carga combos"), cboDias)

        persMedico = Nothing

    End Sub

    Sub ContactsGridView_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        If (e.CommandName = "Seleccionar") Then

        End If
    End Sub

    Private Sub btnVerTurno_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVerTurno.Click
        Dim Row As GridViewRow = gvResultadoBusqueda.SelectedRow
        Dim rs As ADODB.Recordset
        Dim diatrabajo As String
        Dim i As Integer = 4
        Dim param(i - 1) As ADODB.Parameter
        Dim fecha As String, fechaProxima As String

        '@dni_medico varchar(20),
        '@id_institucion varchar(30),
        '@especialidad varchar(30),
        '@diatrabajo varchar(10),
        '@fecha date

        Try
            pnlFechaTurno.Visible = True
            persMedico.SetaDatosXDn(IIf(Row.Cells(4).Text = "&nbsp;", "", Row.Cells(4).Text))
            datosTurnos.dnimedico = persMedico.Dev_Dni

            datosTurnos.id_institucion = persMedico.Dev_ID_Institucion
            datosTurnos.Especialidad = IIf(Row.Cells(2).Text = "&nbsp;", "", Row.Cells(2).Text)
            diatrabajo = cboDias.SelectedItem.Text

            If Not CStr(txtFechaTurno.Text) = "" Then
                fecha = CStr(txtFechaTurno.Text)
            Else
                fecha = Date.Now.ToString("dd/MM/yyyy")
            End If

            fechaProxima = FG.DiaProximo(fecha, diatrabajo)

            'MuestraCartel(fechaProxima, lblDiaProximo)

            param(0) = New ADODB.Parameter
            param(0).Name = "@dnimedico"
            param(0).Type = ADODB.DataTypeEnum.adVarChar
            param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
            param(0).Value = datosTurnos.dnimedico
            param(0).Size = 255

            param(1) = New ADODB.Parameter
            param(1).Name = "@especialidad"
            param(1).Type = ADODB.DataTypeEnum.adVarChar
            param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
            param(1).Value = datosTurnos.Especialidad
            param(1).Size = 255

            param(2) = New ADODB.Parameter
            param(2).Name = "@diatrabajo"
            param(2).Type = ADODB.DataTypeEnum.adVarChar
            param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput
            param(2).Value = diatrabajo
            param(2).Size = 255

            param(3) = New ADODB.Parameter
            param(3).Name = "@fecha"
            param(3).Type = ADODB.DataTypeEnum.adVarChar
            param(3).Direction = ADODB.ParameterDirectionEnum.adParamInput
            param(3).Value = fechaProxima
            param(3).Size = 255

            datosTurnos.fechahorarioturno = fechaProxima

            rs = Datos.TraerTodos("cargaHorariosMedicoTrabaja", param, "Busca turnos por criterios de busqueda ")

            gvTurnosHorarios.DataSource = FG.cargaUnDataTable(rs)
            gvTurnosHorarios.DataBind()
        Catch ex As Exception
            MuestraCartel(ex.Message, lblDiaProximo)
        End Try
    End Sub

    Private Sub gvTurnosHorarios_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvTurnosHorarios.PageIndexChanging
        'gvTurnosHorarios.PageIndex = e.NewPageIndex
        'realizaBusqueda_DataGrid(txtDNI.Text)
    End Sub


    Private Sub gvTurnosHorarios_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvTurnosHorarios.SelectedIndexChanged
        Dim i As Integer = 4
        Dim param(i - 1) As ADODB.Parameter
        Dim Row As GridViewRow = gvTurnosHorarios.SelectedRow
        Dim Medicobusqueda As New Persona
        Dim personaBusqueda As New Persona
        Dim destinatario As String, asunto As String, mensaje As String

        datosTurnos.fechahorarioturno = IIf(Row.Cells(1).Text = "&nbsp;", "", Row.Cells(0).Text) + " " + IIf(Row.Cells(1).Text = "&nbsp;", "", Row.Cells(1).Text)

        '@idInsMedico, @idPersona, @idMedico, @fechaturno, @Especialidad

        param(0) = New ADODB.Parameter
        param(0).Name = "@dniPersona"
        param(0).Type = ADODB.DataTypeEnum.adVarChar
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(0).Value = datosTurnos.dniPersona
        param(0).Size = 20

        param(1) = New ADODB.Parameter
        param(1).Name = "@dniMedico"
        param(1).Type = ADODB.DataTypeEnum.adVarChar
        param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(1).Value = datosTurnos.dnimedico
        param(1).Size = 20

        param(2) = New ADODB.Parameter
        param(2).Name = "@fechaturno"
        param(2).Type = ADODB.DataTypeEnum.adVarChar
        param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(2).Value = datosTurnos.fechahorarioturno
        param(2).Size = 30

        param(3) = New ADODB.Parameter
        param(3).Name = "@Especialidad"
        param(3).Type = ADODB.DataTypeEnum.adVarChar
        param(3).Direction = ADODB.ParameterDirectionEnum.adParamInput
        param(3).Value = datosTurnos.Especialidad
        param(3).Size = 255

        personaBusqueda.SetaDatosXDn(datosTurnos.dniPersona)
        Medicobusqueda.SetaDatosXDn(datosTurnos.dnimedico)

        If Datos.Agregar("agregarTurnoInstitucion", param, "Carga turno en institucion") Then
            limpiarControles()

            If Medicobusqueda.Dev_ExistePersona And personaBusqueda.Dev_ExistePersona Then
                MuestraCartel("Turno asignado para el paciente: " + personaBusqueda.Dev_ApellidoYnombre + _
                              " para el dia: " + datosTurnos.fechahorarioturno + " profesional: " + Medicobusqueda.Dev_ApellidoYnombre _
                              + " Especialidad: " + datosTurnos.Especialidad, lblMensajeRegistro)


                asunto = "Nuevo turno asignado"
                If personaBusqueda.Dev_mail = "" Then
                    Exit Sub
                Else

                    destinatario = personaBusqueda.Dev_mail
                    mensaje = "<html><body>Turno asignado para el paciente: <b>" + personaBusqueda.Dev_ApellidoYnombre + _
                                  "<b><br/>Para el dia: " + datosTurnos.fechahorarioturno + "<br/>Profesional: " + Medicobusqueda.Dev_ApellidoYnombre _
                                  + "<br/>Especialidad: " + datosTurnos.Especialidad + "</body></html>"

                    FG.EnviarMail(destinatario, asunto, mensaje)
                End If

            End If
            txtDNI.Text = ""
        Else
            MuestraCartel("Error, no se pudo guardar el registro. Revise el log de errores", lblDiaProximo)
        End If

    End Sub


    Protected Sub Btn_Ok_Confirmacion_Click(sender As Object, e As EventArgs) Handles Btn_Ok_Confirmacion.Click
        Dim destinatario As String, asunto As String, mensaje As String
        Dim personabusqueda As New Persona, medicobusqueda As New Persona
        personabusqueda.SetaDatosXDn(txtDNIpaciente.Text)

        If borrarTurnos(lblBorrar.Text) Then

            If personabusqueda.Dev_ExistePersona Then
                asunto = "Turno borrado"
                destinatario = personabusqueda.Dev_mail
                mensaje = "<html><body>Turno borrado para el paciente: <b>" + personabusqueda.Dev_ApellidoYnombre + _
                              "<b><br/>Para el dia: " + lblFechaHoraBorrar.Text + "<br/>Profesional: " + lblNombreMedicoBorrar.Text _
                              + "<br/>Especialidad: " + lblEspecialidadBorrar.Text + "</body></html>" + _
                                "<br/><pre/><b>El equipo de SCHC.<pre/></b></body></html>"

                FG.EnviarMail(destinatario, asunto, mensaje)
            End If

            popupConfirmacion.Hide()

            BuscarDatos()
        Else
            MuestraCartel("Error no se puedo eliminar el turno con ID: " + lblBorrar.Text, lblMensajeConfirmacion)
        End If

    End Sub

    Protected Sub btn_Cancel_Confirmacion_Click(sender As Object, e As EventArgs) Handles btn_Cancel_Confirmacion.Click
        SacaCartelDeAViso(lblBorrar)
        SacaCartelDeAViso(lblMensajeConfirmacion)
        popupConfirmacion.Hide()
    End Sub

    Protected Sub btnIniciarLectura_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnIniciarLectura.Click
        mdlpopupHuella.Show()
    End Sub

    Protected Sub Btn_OK_Verdadero_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Btn_OK_Verdadero.Click

        txtDNI.Text = Lector.IdentificaPersonas_DevuelveDNI
        If txtDNI.Text = "" Then
            MuestraCartel("Huella no identificada", lblMensajeRegistro)

        Else

            BuscarDatos()
        End If
        mdlpopupHuella.Hide()

    End Sub
End Class

